<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div>
    hello,this world
  </div>
  <script>
    let x = "aacccccdada"
    let a = "aa"
    let res = eval(`/${a}/`).test(x)//eval执行字符串中的js代码
    console.log(res);
    //使用new RegExp来进行比对
    let reg = new RegExp('d', 'g')
    console.log(reg.test(x));
    //实例使用
    let con = prompt('请输入要替换的内容')
    let rep = new RegExp(con, 'g')
    let div = document.querySelector('div')
    div.innerHTML = div.innerHTML.replace(rep, "@" /* search => {
      return `<span style="color:red">${search}</span>`
    } */)
    //综合，电话号码的格式
    let tele = '020-8473730';
    console.log(/(020|010)\-\d{7,8}/.test(tele));
    //原子表[]和原子组()
    let num = '132214214i210';
    console.log(/[123]/.test(num));//123中只要有一个数字存在就可以
    console.log(/(12|23)/.test(num));//必须要求有12或者23
    //转义
    let float = 23.23
    let result = new RegExp("\\d+\\.\\d+");
    console.log(result.test(float));
    let wz = "https://www.baidu.com"
    console.log(/https?:\/\/\w+\.\w+\.\w+/.test(wz));
    //字符边界约束，起始边界^，结束边界$
    let border = "wer234jj";
    console.log(/\d/.test(border));//没有边界，意味着只要字符串中存在数字就符合
    let border2 = "2222"
    console.log(/^\d+$/.test(border2));
    //元字符，空白/s
    let dhb = `
    谭是:010-88888888,ddd:020-0000000`;
    console.log(dhb.match(/[^-\d:,\s]+/g)/* .join("") */);
    // \w字符，数字以及下划线，\W字符，数字以及下划线除此之外的
    let ww = "@www333_##11"
    console.log(ww.match(/[\w]+/g));
    //.除了\n之外的任何单个字符
    let dd = "www.http@sss"
    console.log(dd.match(/\w+.\w+.\w+/));
    //所有字符[\d\D][\s\S][\w\W]
    //不区分大小写i
    //多行匹配m//.replace("\n", "")
    let name = `
    #1 ming,17 #
    #2 zhao,18 #
    #3 li,29 #`;
    let all = name.match(/^\s*#\d+\s+.+\s+#$/gm).map(item => {
      let x = item.replace(/\s*#\d+\s*/, '').replace(/\s*#/, '');
      [name, age] = x.split(',');
      return { name, age }
    })
    console.log(all);
    //匹配字符，中文，标点符号[L]
    let newDot = '2021年9月19日.3397!name="ming"';
    console.log(newDot.match(/\p{L}/gu));//匹配字符包括汉字，/u类似找到utF-8类型的字符
    console.log(newDot.match(/\p{P}/gu));//匹配标点符号
    console.log(newDot.match(/\p{sc=Han}/gu));//匹配中文
    //控制位置
    let quanju = /\w/g
    console.log(quanju.exec(newDot));
    console.log(quanju.lastIndex);
    console.log(quanju.exec(newDot));//使用此方法可以获取到结果以及对应的索引号
    //配合上方的位置检索，更加有效率，\y
    //原子表配合\1,\2等等，指的是值跟第几个原子表的值一样
    let nowtoday = '2021/9/17'
    console.log(nowtoday.match(/\d{4}([-\/])\d{1,2}\1\d{1,2}/));
    //[()]括号放到原子表里面不会解析，指的就是（），但是放在[]外面指的是原子组
    //\s忽略换行符
    //[/*****/,/*****/]使用此方法可以同时验证多个正则表达式
    //全局匹配matchAll，exec配合while()可以实现全局匹配
    //用到的函数 search可以查找到目标的索引值，match可以查找到目标的值，split可以进行分割
    //$&,$`,$'
    let newzifu = "=ddsd++"
    console.log(newzifu.replace(/ddsd/, "$'"));//将所查找的内容替换成它后面的字符串
    console.log(newzifu.replace(/ddsd/, "$&"));//将所查找的内容替换成它本身
    console.log(newzifu.replace(/ddsd/, "$`"));//将所查找的内容替换它前面的字符串
    //$2,第二个原子组，类似于之前在正则表达式种的\1\2
    //?<xxxx>  $<xxx>是原子组的别名
    //?=断言匹配，类似于条件
    let ggg = '原来new原来dddd'
    console.log(ggg.replace(/原来(?=dddd)/, 'B'));//后面的是dddd，这个类似于条件
    //?<=xx 前面是xx,?<!xx 前面不是xx
    //?！xxx，不是xxx

  </script>
</body>

</html>